package com.ruoyi.test.api;

import com.ruoyi.common.core.utils.uuid.UUID;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.test.povodto.R;
import com.ruoyi.test.service.UserService;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

/**
 * <h1>最简单的session验证示例</h1>
 * <pre></pre>
 * @className AC1Controller
 * @author dujg
 * @date 2024/7/30 13:47
 * @copyright : Sysware Technology Co., Ltd 
 */
@Slf4j
@RestController
@RequestMapping("/api")
public class AC2Controller {
    @Autowired
    private RedisService redisService;
    @Autowired
    private UserService userService;
    /**
     * <h1>用户登录</h1>
     * <pre></pre>
     * @author dujg
     * @date 2024/7/30 13:48
     * @return com.ruoyi.test.povodto.R
     */
    @PostMapping("/user/login")
    public R login(String user, String password, HttpSession session)
    {
        log.info("数据库验证user&password数据库验证成功,返回用户对象");
        if(true){
            //可以存数据库，redis等方式来解决分布式session不共享的问题
            String tokenId = UUID.randomUUID().toString();
            //redis存{tokenId:用户对象:过期时间}
//            HashMap 用户对象 = new HashMap();
//            redisService.setCacheObject(tokenId, 用户对象, TimeUnit.MINUTES);
            String Jwt令牌=null;
            Map<String, Object> claimsMap = new HashMap<String, Object>();
            claimsMap.put("用户key", tokenId);
            claimsMap.put("用户Id", 1);
            claimsMap.put("用户名", "dujg");
            Jwt令牌 = Jwts.builder().setClaims(claimsMap).signWith(SignatureAlgorithm.HS512, "芝麻开门").compact();
            return R.ok(Jwt令牌);
        }
        return R.fail();
    }
    /**
     * <h1>接口调用测试认证</h1>
     * <pre>正常逻辑应该是放到过滤器里面的，所有的请求需要过滤认证</pre>
     * @author dujg
     * @date 2024/7/30 13:48
     * @return com.ruoyi.test.povodto.R
     */
    @GetMapping("/user/ac")
    public R getInfo(String token)
    {
        Claims claims = Jwts.parser().setSigningKey("芝麻开门").parseClaimsJws(token).getBody();
//        String tokenId = claims.get("用户key");
//        用户对象 u = redisService.getCacheObject(tokenId);
        //u存在
        if(true){
            log.info("令牌验证成功！！！");
        }
        return R.fail();
    }
}